﻿using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Reflection;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using Microsoft.SmallBasic.Library;

namespace PrevisaoTempo
{

    /// <summary>
    /// Busca a previsão do tempo da localidade escolhida
    /// </summary>
    [SmallBasicType]
    public static class PrevisaoTempo
    {
        /// <summary>
        /// Previsão do tempo para Hoje
        /// </summary>
        /// <param name="NomeLocalidade">Nome da Localidade</param>
        /// <returns>Texto com a Previsão</returns>
        public static Primitive Hoje(Primitive NomeLocalidade)
        {
            Primitive resultado;
            try
            {
                resultado = VerificaPrevisao(NomeLocalidade,0);

            }catch{
                resultado = "Sem Previsão";
            }
            return resultado;
        }

        /// <summary>
        /// Previsão do tempo para Amanhã
        /// </summary>
        /// <param name="NomeLocalidade">Nome da Localidade</param>
        /// <returns>Texto com a Previsão</returns>
        public static Primitive Amanha(Primitive NomeLocalidade)
        {
            Primitive resultado;
            try
            {
                resultado= VerificaPrevisao(NomeLocalidade, 1);
            }
            catch
            {
                resultado = "Sem Previsão";
            }
            return resultado;
        }

        /// <summary>
        /// Previsão do tempo para Depois de Amanhã
        /// </summary>
        /// <param name="NomeLocalidade">Nome da Localidade</param>
        /// <returns>Texto com a Previsão</returns>
        public static Primitive DepoisDeAmanha(Primitive NomeLocalidade)
        {
            Primitive resultado;
            try
            {
                resultado = VerificaPrevisao(NomeLocalidade, 2);
            }
            catch
            {
                resultado = "Sem Previsão";
            }
            return resultado;
        }

        /// <summary>
        /// Previsão do tempo para daqui 2 dias
        /// </summary>
        /// <param name="NomeLocalidade">Nome da Localidade</param>
        /// <returns>Texto com a Previsão</returns>
        public static Primitive DepoisDepoisDeAmanha(Primitive NomeLocalidade)
        {
            Primitive resultado;
            try
            {
                resultado = VerificaPrevisao(NomeLocalidade, 2);
            }
            catch
            {
                resultado = "Sem Previsão";
            }
            return resultado;
        }

        /// <summary>
        /// Previsão do tempo para daqui 3 dias
        /// </summary>
        /// <param name="NomeLocalidade">Nome da Localidade</param>
        /// <returns>Texto com a Previsão</returns>
        public static Primitive DepoisDepoisDepoisDeAmanha(Primitive NomeLocalidade)
        {
            Primitive resultado;
            try
            {
                resultado = VerificaPrevisao(NomeLocalidade, 2);
            }
            catch
            {
                resultado = "Sem Previsão";
            }
            return resultado;
        }

        private static Primitive VerificaPrevisao(Primitive NomeLocalidade, int dias)
        {
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(
                Network.GetWebPageContents(
                    @"http://www.google.com/ig/api?hl=pt-BR&weather=" + NomeLocalidade.ToString()
                    )
            );

            string strNodeName = "";

            if (dias == 0)
            {
                strNodeName = "current_conditions";
            }
            else {
                dias = dias - 1;
                strNodeName = "forecast_conditions";
            }

            XmlNode  elemList = xmldoc.GetElementsByTagName(strNodeName)[dias];

            return (elemList.SelectNodes("condition")[0].Attributes["data"].InnerText);
        
        }
    }
}
